package com.juqimiao.raccoon.commodity.domain.category;

import com.juqimiao.linn.domain.Entity;
import com.juqimiao.raccoon.commodity.domain.ExtensionFeature;
import com.sun.istack.internal.NotNull;
import lombok.Data;

import java.util.ArrayList;
import java.util.List;

/**
 * 表示商品属性的基类。
 *
 * @author Collin Cai
 */
@Data
public abstract class AbstractPropConfig extends Entity implements Comparable<AbstractPropConfig> {
    private static final long serialVersionUID = 34851099384837L;
    /**
     * 所属类目属性ID，父属性ID。
     */
    private String categoryId;
    /**
     * 所属类目属性的上一级ID。如果没有所属父属性将保持null.
     */
    private String parentPropId;

    /**
     * 属性名称。属性名可以重复。
     */
    private String name;
    /**
     * 提示信息。
     */
    private String tips;
    /**
     * 是否允许使用别名
     */
    private String allowAlias;
    /**
     * sale or item property.
     */
    private PropertyType type;
    /**
     * 是否是关键属性
     */
    private Boolean key;

    /**
     * 发布产品或商品时是否为必选属性。可选值:true(是),false(否)
     */
    private Boolean required;

    /**
     * 包含编辑商品属性的界面模版。
     */
    private String childTemplate;
    /**
     * 属性的feature列表。
     */
    private List<ExtensionFeature> features = new ArrayList<>();
    /**
     * 排列序号。取值范围:大于零的整排列序号。取值范围:大于零的整数
     */
    private Integer sortOrder;
    /**
     * 状态。可选值:normal(正常),deleted(删除)
     */
    private String status;

    @Override
    public int compareTo(@NotNull AbstractPropConfig propConfig) {
        return this.sortOrder - propConfig.sortOrder;
    }
}
